package com.itheima.service.impl;

import com.itheima.dao.AccountDao;
import com.itheima.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

@Service("accountService")
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void changeMoney(int id, double v) {
        redisTemplate.opsForValue().set("account:id" + id, v);
    }

    @Override
    public Double findMondyById(int id) {
        Object o = redisTemplate.opsForValue().get("account:id" + id);
        return new Double(o.toString());
    }

    public void save() {
        // redisTemplate.opsForValue().flushAll();
        // redisTemplate.flushAll();

    }

    //        redisTemplate.type()
//        redisTemplate.persist()
//        redisTemplate.move()
//        redisTemplate.hasKey()
//        redisTemplate.getExpire()
//        redisTemplate.expire()
//        redisTemplate.delete()
//        redisTemplate.rename();
//
//        redisTemplate.opsForValue().;
//        redisTemplate.opsForHash().;
//        redisTemplate.opsForList().;
//        redisTemplate.opsForSet().;
//        redisTemplate.opsForZSet();
//
//
//        redisTemplate.boundValueOps().;
//
//        redisTemplate.slaveOf();
//        redisTemplate.slaveOfNoOne();
//
//        redisTemplate.opsForCluster()
    // private DataSource dataSource;

    // public void setDataSource(DataSource dataSource) {
    //     this.dataSource = dataSource;
    // }

    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }

    // public void transfer(String outName, String inName, Double money) {
    //     accountDao.inMoney(outName,money);
    //     int id = 1/0;
    //     accountDao.outMoney(inName,money);
    // }

    //    public void transfer(String outName, String inName, Double money) {
//        //开启事务
//        PlatformTransactionManager ptm = new DataSourceTransactionManager(dataSource);
//        //事务定义
//        TransactionDefinition td = new DefaultTransactionDefinition();
//        //事务状态
//        TransactionStatus ts = ptm.getTransaction(td);
//
//        accountDao.inMoney(outName,money);
//        int id = 1/0;
//        accountDao.outMoney(inName,money);
//
//        //提交事务
//        ptm.commit(ts);
//    }
    @Override
    public void transfer(String outName, String inName, Double money) {
        accountDao.inMoney(outName, money);
        // final int id = 1 / 0;
        accountDao.outMoney(inName, money);
    }

    @Override
    public void a() {
        accountDao.b();
    }

}
